package edu.unice.simul.util;

/**
 * Modelise un point dans la simulation. Rappellons que nous manipulons
 * uniquement des coordonnées en nombre entier dans cette classe. Elle a deux
 * constructeurs, un qui prend en paramètre deux entiers et un contructeur par
 * copie. Le construteur sans parametre initialise les attributs avec des zeros.
 * 
 * @author joel
 */

public class Dim {
	public final static int ECHELLE = 100;
	private int x, y;

	public Dim(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public Dim(Dim d) {
		this.x = d.x;
		this.y = d.y;
	}

	public Dim() {
		this.x = 0;
		this.y = 0;
	}

	/**
	 * Renvoie l'abcisse de l'objet courant
	 */
	public int getX() {
		return this.x;
	}

	/**
	 * Renvoie l'ordonnées de l'objet courant
	 */
	public int getY() {
		return this.y;
	}

	/**
	 * Met à jour l'abcisse de l'objet courant
	 */
	public void setX(int x) {
		this.x = x;
	}

	/**
	 * Met à jour l'abcisse de l'objet courant
	 */
	public void setY(int y) {
		this.y = y;
	}

	/**
	 * Test l'égalité de deux de position
	 */
	@Override
	public boolean equals(Object pos) {
		if ((this.x == ((Dim) pos).getX()) && (this.y == ((Dim) pos).getY()))
			return true;
		return false;
	}

	public String toString() {
		return "(" + x + "," + y + ")";
	}

	/**
	 * Calcule le produit scalaire de l'objet courant avec l'objet point passé en
	 * paramèttre. Le resultat est un nombre entier.
	 */
	public int produitScalaire(Dim d) {
		int ps;
		ps = this.getX() * d.getX() + this.getY() * d.getY();
		return ps;
	}

	/**
	 * Calcul le produit vectoriel de l'objet courant avec l'objet point passé en
	 * paramètre.
	 */
	public int produitVectoriel(Dim d) {
		int pv;
		pv = this.getX() * d.getY() - this.getY() * d.getX();
		return pv;
	}

	/**
	 * Les deux points se trouvest soit sur la même des coordonnées, mais ne se
	 * chevauchent.
	 */
	public boolean deplacementCompatible(Dim pos) {
		if (pos.getX() == getX())
			return Math.abs(pos.getY() - getY()) == 1;
		else if (pos.getY() == getY())
			return Math.abs(pos.getX() - getX()) == 1;
		return false;
	}

	public double getAbscisse() {
		return this.getX() + 0.5;
	}

	public double getOrdonnee() {
		return this.getY() + 0.5;
	}
}
